package com.gsbelarus.gedemin.income.sync;

import android.content.Intent;
import android.preference.PreferenceManager;

import com.gsbelarus.gedemin.income.fragment.SettingsFragment;
import com.gsbelarus.gedemin.lib.sync.protocol.AlarmReceiver;

import java.util.Calendar;

public class SyncReceiver extends AlarmReceiver {

    private final int ALARM_HOUR[] = {9, 13, 17, 21};

    /**
     * @param oldDate последняя дата на которой была синхронизация
     * @return дата седующей синхронизации
     */
    @Override
    public Calendar getNextSyncDate(Calendar oldDate) {
        Calendar newDate = (Calendar) oldDate.clone();
        do {
            /** проверка на праздники и выходные */
            if (newDate.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
                /** если праздник или выходной, то переходим на следующий день */
                newDate.add(Calendar.DATE, 1);
                continue;
            }
            for (int hour : ALARM_HOUR) {
                /** устанавливаем час из массива */
                newDate.set(Calendar.HOUR_OF_DAY, hour);

                /** если время с установленым часом больше текущего времени, то ставим будильник */
                if (System.currentTimeMillis() + 500 < newDate.getTimeInMillis()) {
                    return newDate;
                }
            }
            newDate.add(Calendar.DATE, 1);
        } while (true);
    }

    /**
     * @return Intent для запуска сервиса
     */
    @Override
    public Intent getServiceIntent() {
        return new Intent(getContext(), SyncService.class);
    }

    /**
     * @return в каком режиме проводить синхронизацию. Вызывается перед каждой синхронизацей.
     */
    @Override
    public boolean isWorkMode() {
        return PreferenceManager.getDefaultSharedPreferences(getContext()).getBoolean(SettingsFragment.WORK_MODE, false);
    }
}
